home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / gfxfx / fractal3.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-18  |  1KB  |  39 lines

  1.  
  2. {$g+,n+,e-}
  3.  
  4. { Reals   :       -1     -0.1      0.3   -1.139
  5.   Complex :        0      0.8     -0.5    0.238 }
  6.  
  7. program Julia;
  8. { Julia Fractal, uses hardcoded ET4000 SVGA mode! By Bas van Gaalen, Holland, PD }
  9. uses crt;
  10. const vidseg:word=$a000;
  11. type real=double;
  12. var cx,cy,xo,yo,x1,y1:real; mx,my,a,b,i,orb:word;
  13.  
  14. procedure setpal(col,r,g,b : byte); assembler; asm
  15.   mov dx,03c8h; mov al,col; out dx,al; inc dx; mov al,r
  16.   out dx,al; mov al,g; out dx,al;; mov al,b; out dx,al; end;
  17.  
  18. begin
  19.   write('Real part: '); readln(cx);
  20.   write('Imaginary part: '); readln(cy);
  21.   asm mov ax,13h; int 10h; end;
  22.   for i:=1 to 64 do setpal(i,15+round(i/1.306122449),10+i div 3,10+i div 3);
  23.   mx:=319; my:=199;
  24.   for a:=1 to mx  do
  25.     for b:=1 to my do begin
  26.       xo:=-2+a/(mx/4); { X complex plane coordinate }
  27.       yo:=2-b/(my/4); { Y complex plane coordinate }
  28.       orb:=0; i:= 0;
  29.       repeat
  30.         x1:=xo*xo-yo*yo+cx; y1:=2*xo*yo+cy; xo:=x1; yo:=y1; inc(i);
  31.       until (i=64) or (x1*x1+y1*y1>4) or (abs(x1)>2) or (abs(y1)>2);
  32.       if i<>64 then orb:=i;
  33.       mem[vidseg:b*320+a]:=orb; { Plot orbit }
  34.     end;
  35.   while not keypressed do;
  36.   while keypressed do readkey;
  37.   textmode(lastmode);
  38. end.
  39.